//
//  UIImage+Category.h
//  OCDemo
//
//  Created by 朱慕之 on 2022/1/2.
//

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

typedef NS_ENUM(NSInteger, GradientType) {
    GradientFromTopToBottom = 1,            //从上到下
    GradientFromLeftToRight,                //从做到右
    GradientFromLeftTopToRightBottom,       //从上到下
    GradientFromLeftBottomToRightTop        //从上到下
};


@interface UIImage (Category)

#pragma mark - 图片处理
/**
 *  返回一张拉伸不变形的图片
 *
 *  @param name 图片名称
 */
+ (UIImage *)resizableImage:(NSString *)name;

/**
 * 返回一张拉伸不变形的图片
 * @param image 拉伸图片
 */
+ (UIImage*)stretchableImage:(UIImage *)image;

/**
 *  在一个View上截图
 *
 *  @param view 目标View
 *  @param rect 需要截取的范围
 */
+ (UIImage *)imageByScreenshotsWithView:(UIView *)view andRect:(CGRect)rect;

/**
 *  保持原来的长宽比，生成一个缩略图
 *  @param asize 需要的长、宽
 *
 */
+ (UIImage *)thumbnailWithImageWithoutScale:(UIImage *)image size:(CGSize)asize;

/**
 *  保持原来的长宽比，生成一个缩略图
 *  @param targetWidth 需要的长、宽任何一个，按等比例缩放
 *
 */
+ (UIImage *)compressImage:(UIImage *)sourceImage toTargetWidth:(CGFloat)targetWidth;

/** 2016年08月01日 add by 胡仕君
 *  图片上传到服务器之前的处理：
 *  1、保证图片不旋转90度；
 *  2、根据图片的大小比例进行压缩；
 *  3、通过UIImageJPEGRepresentation压缩一半
 *
 *  @param bigImage 要处理的大图片
 *
 *  @return 处理后的小图片
 */
+ (UIImage *) handleImageBeforeUploadWithImage:(UIImage *) bigImage;

/** 2016年12月23日 by 胡仕君：针对登记证1-2，3-4做特殊处理
 根据传入的大图片，和指定的压缩宽度，压缩图片
 
 @param bigImage 大图片
 @param resizeWidth 指定的压缩宽度
 @return 处理后的小图片
 */
+ (UIImage *) handleImageBeforeUploadWithImage:(UIImage *) bigImage resizeWidth:(CGFloat) resizeWidth;

/**
 @param bigImage 大图片
 @param resizeWidth 指定的压缩宽度
 @return 处理后的小图片
 */
+ (NSData *) handleImageDataBeforeUploadWithImage:(UIImage *) bigImage resizeWidth:(CGFloat) resizeWidth;
#pragma mark - 图片压缩

+ (UIImage *)thumbnailWithImage:(UIImage *)image;

- (UIImage *)croppedImage:(CGRect)bounds;

- (UIImage *)resizedImage:(CGSize)newSize
     interpolationQuality:(CGInterpolationQuality)quality;

- (UIImage *)resizedImageWithContentMode:(UIViewContentMode)contentMode
                                  bounds:(CGSize)bounds
                    interpolationQuality:(CGInterpolationQuality)quality;

- (UIImage *)resizedImage:(CGSize)newSize
                transform:(CGAffineTransform)transform
           drawTransposed:(BOOL)transpose
     interpolationQuality:(CGInterpolationQuality)quality;

- (CGAffineTransform)transformForOrientation:(CGSize)newSize;

- (UIImage *)fixOrientationforJZG;

- (UIImage *)rotatedByDegrees:(CGFloat)degrees;


#pragma mark - 创建纯色的image

+ (UIImage *)imageWithColor:(UIColor *)color;

/**
 处理图像为高斯模糊

 @param image 待处理图片
 @return 处理后的图片
 */
+ (UIImage *)blurEffectImg:(UIImage *)image;


#pragma mark - 二维码

/**
 * 生成二维码
 *
 * @param codeStr   code数据字符串
 * @param codeWidth code宽高
*/
+ (UIImage *)generateQRCode:(NSString *)codeStr codeWidth:(CGFloat)codeWidth;

/**
 * 带logo二维码
 * @param codeStr      code数据字符串
 * @param codeWidth    code宽高
 * @param logo         codeLogo
 */
+ (UIImage *)generateQRCode:(NSString *)codeStr codeWidth:(CGFloat)codeWidth logo:( UIImage * _Nullable)logo;


#pragma mark - 渐变背景颜色

/**
 *  根据给定的颜色，生成渐变色的图片
 *  @param imageSize        要生成的图片的大小
 *  @param colorArr         渐变颜色的数组
 *  @param percents          渐变颜色的占比数组
 *  @param gradientType     渐变色的类型
 */
- (UIImage *)createImageWithSize:(CGSize)imageSize gradientColors:(NSArray *)colorArr percentage:(NSArray *)percents gradientType:(GradientType)gradientType;


@end

NS_ASSUME_NONNULL_END
